<?php

App::uses('File', 'Utility');
class ComidasController extends AppController 
{
	
	public $uses = array('TipoComida','Comida');	
	public $bandera = true;
	
	#---------------------------------------------------#
	#---------------Funciones Principales---------------#
	#---------------------------------------------------#
	public function index()
	{
		$this->layout = 'default_ini';	  
	}
	
	public function add_comida()
	{
		$this->layout = 'default_ini';		
		$this->llenar_combobox_tipo_comida(2);
		if($this->request->is('post') || $this->request->is('put'))
		{
			$this->postAddComida();
		}
	}
	
	public function consult_comida()
	{
		$this->layout = 'default_ini';	
		$this->llenar_combobox_tipo_comida(1);
	}
	
	public function consult_comida1($id_tipo_comida,$nombre_comida = null)
	{
		$this->layout = 'default_ini';	
		if ($id_tipo_comida == "")
		{
			$this->setMessageFlash(2, 'error id_tipo_comida', null);
		}
		elseif ($nombre_comida == "") 
		{	
			$this->setMessageFlash(2, 'error nombre_comida', null);
		}
		else
		{
			$this->infoConsultComida($id_tipo_comida,$nombre_comida);
			if($this->request->is('post') || $this->request->is('put'))
			{
				$this->postConsultComida();
			}
		}
	}
	
	public function edit_comida ($id_comida = null)
	{
		$this->layout = 'default_ini';	
		if($id_comida == "")
		{
			$this->setMessageFlash(2, 'error id_comida', null);
		}
		else 
		{
			$this->llenarInfoComida(1, $id_comida);
			if($this->request->is('post') || $this->request->is('put'))
			{
				$this->postEditComida();
			}
			
		}
	}
	
	public function detalle_comida ($id_comida = null)
	{
		$this->layout = 'default_ini';	
		if($id_comida == "")
		{
			$this->setMessageFlash(2, 'error id_comida', null);
		}
		else 
		{
			$this->llenarInfoComida(2, $id_comida);
			
		}
	}
	
	public function delete_comida($id_comida,$id_val = null)
	{
		
		if($id_comida == "")
		{
			$this->setMessageFlash(2, 'error $id_comida', null);
		}
		elseif ($id_val == "")
		{
			$this->setMessageFlash(2, 'error $id_val null', null);
		}
		else 
		{
			if($id_val == 1)
			{
				if($this->delete_single_comida($id_comida))
				{
					$this->setMessageFlash(1, 'Se borro el comida satisfactoriamente', null);
				}
				else 
				{
					$this->setMessageFlash(2,'No se pudo borrar la comida', null);
				}
			}
			elseif ($id_val == 2) 
			{
					
				if($this->length_arreglo_comida($id_comida) > 2)
				{
					$this->delete_multiples_comida($id_comida);
				}
				elseif ($this->length_arreglo_comida($id_comida) == 2) 
				{
					$comida = explode(',', $id_comida);
					if($this->delete_single_comida($comida[1]))
					{
						$this->setMessageFlash(1, 'Se borro el comida satisfactoriamente', null);
					}
					else 
					{
						$this->setMessageFlash(2, 'No se pudo borrar la comida', null);
					}
				}
				

			}
			else 
			{
				$this->setMessageFlash(2, 'error id_val', null);
			}
			
			//$this->redirect($this->referer());	
			
		}
	}
	
	public function upload_tmp_file()
	{
		$this->layout = false;
	}
	
	#---------------------------------------------------#
	#---------------Funciones Secundarias---------------#
	#---------------------------------------------------#
	
	private function setMessageFlash($id,$mensaje,$nombre_mensaje)
	{
		if (is_null($nombre_mensaje))
		{
			$nombre_mensaje = 'flash';
		}
		switch ($id) 
		{
			case 1: // mensaje bueno
				$this->Session->setFlash($mensaje,'default',array('class'=>'success'),$nombre_mensaje);
				break;
			case 2: // mensaje malo
				$this->Session->setFlash($mensaje,'default',array('class'=>'error-message'),$nombre_mensaje);
				break;
			case 3: // mensaje cuidado
				$this->Session->setFlash($mensaje,'default',array('class'=>'notice'),$nombre_mensaje);
				
				break;
			
			default:
				
				break;
		}
	}
	
	public function getDetalleComida($id_comida)
	{
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			$this->llenarInfoComida(2, $id_comida);
			$this->render('/Elements/GetDetalleComida');
		}
	}
	public function getErrors($errors)
	{
		$errores_view = '';
		
		if (array_key_exists('nombre_comida', $errors))
		{
			$errores_view = $errores_view .'|'.'Nombre de la Comida'.'++'.$errors['nombre_comida'][0];
		}
		if (array_key_exists('tipo_comida_id', $errors))
		{
			$errores_view = $errores_view .'|'.'Tipo de Comida'.'++'.$errors['tipo_comida_id'][0];
		}

		return $errores_view;
		
		
	}
	public function parserError($error)
	{
		$array_error = array();	
			
		$string_error = explode('|', $error);
		
		for ($i = 0; $i < count($string_error); $i++)
		{
			if ($i != 0)
			{
				$string_problema = explode('++',$string_error[$i]);
					
				array_push($array_error,array(
												'campo' => $string_problema[0],
												'error' => $string_problema[1],
												)
							);
			}
			
		}
		return $array_error;
	}
	public function getEditComida($id_comida,$error = null)
	{
		$this->layout = false;
		
		if ($this->request->is('get')) 
		{
			$this->llenarInfoComida(1, $id_comida);
			
			if ($error)
			{
				$this->set('errors',$this->parserError($error));	
			}
			else
			{
				$this->set('errors',null);	
			}
			
			$this->render('/Elements/GetEditComida');
		}
		elseif ($this->request->is('post') || $this->request->is('put') )
		{
		
			$info_comida = array( 
										'Comida'=> array(
															'id' => $this->request->data['id'],
															'nombre_comida' => $this->request->data['nombre_comida'],
															'tipo_comida_id' => $this->request->data['tipo_comida_id'],
															'descripcion_comida' => $this->request->data['descripcion_comida'],
															'foto_comida' => $this->request->data['foto_comida_char'],
															'foto_comida_upload' => array(
																						'name' => $this->request->data['foto_comida_name'],
																						'type' => $this->request->data['foto_comida_type'],
																						'tmp_name' => 'D:\xampp\tmp\php123456.tmp',
																						'error' => intval('0'),
																						'size' => intval($this->request->data['foto_comida_size'])
																					),
															'foto_comida_dir' => $this->request->data['foto_comida_dir'],
															'foto_comida_viejo' => $this->request->data['foto_comida_viejo'],
															'foto_comida_valor_img' => $this->request->data['foto_comida_valor_img']
															
														) 
										
									);

			

			$this->postEditComida($info_comida);
		}
		
	}

	function saveImg($data, $id_comida, $comida_nombre)
	{

		 $str_data = explode(',', $data);
		 
		 $image = $this->base64_to_jpeg( $str_data[1], 
		 								WWW_ROOT.'files/comida/foto_comida/'
										.$id_comida.'/'.$comida_nombre );
		
		/*'C:\xampp\htdocs\BackEndRecursosHumanos\app\webroot\files\comida\foto_comida\\'
										.$id_comida.'\\'.$comida_nombre */
	}
	
	function base64_to_jpeg( $base64_string, $output_file ) 
	{
	    $ifp = fopen( $output_file, "wb+" ); 
	    fwrite( $ifp, base64_decode( $base64_string) ); 
	    fclose( $ifp ); 
	    return( $output_file ); 
	}
	
	public function getGridConsultComida($id_tipo_comida, $nombre_comida)
	{
		
		$this->layout = false;
		if ($this->request->is('get')) 
		{
			
			$this->llenar_comida($id_tipo_comida, $nombre_comida);
			$this->render('/Elements/GridConsultComida');
		}
		
	}
	
	private function eliminar_comida($id_comida)
	{
		try
		{
			$this->Comida->query('DELETE FROM comidas WHERE id = '.$id_comida);
			return true;
		}
		catch (Exception $e)
		{
			return false;
	
		}
	}
	
	private function length_arreglo_comida($arreglo_comida)
	{
		$comidas = explode(',', $arreglo_comida);
		return count($comidas);
	}
	
	private function delete_single_comida($id_comida)
	{
			return $this->eliminar_comida($id_comida);
	}
	
	private function delete_multiples_comida($id_comidas)
	{
			
		$comidas = explode(',', $id_comidas);
		
		$buenas = array();
		$malas = array();
		
		foreach ($comidas as $comida) 
		{
			if($comida != "")
			{
				
				if($this->eliminar_comida($comida))
				{
					array_push($buenas,$comida);
				}
				else 
				{
					array_push($malas,$comida);
				}
				
				
			}
		}
		if ($buenas != null )
		{
			if ($malas != null)
			{
				$this->setMessageFlash(2,'No se borraron la(s) comida(s) seleccionada(s)', null);
				return 3; // significa que varias se pudieron eliminar, otras no.
			}
			else 
			{
				$this->setMessageFlash(1, 'Se borraron la(s) comida(s) seleccionada(s)', null);
				return 1; // significa que todas se pudieron eliminar.
			}
		}
		else 
		{
			if ($malas != null)
			{
				$this->setMessageFlash(2, 'No se borraron la(s) comida(s) seleccionada(s)', null);
				return 2; //significa que no se puedieron eliminar ninguna
			}
			else 
			{
				$this->setMessageFlash(2, 'error al borrar', null);
				return 0; // error
			}
		}
		
		
		
	}
	
	private function postEditComida($info_comida)
	{
		$this->Comida->create();
		
		$this->Comida->set($info_comida);
		
		$error = null;
		
		if ($this->Comida->validates()) 
		{
		
			if ($this->Comida->save($info_comida))
			{
				if ($info_comida['Comida']['foto_comida'] != $info_comida['Comida']['foto_comida_viejo'])
				{
					$dir =  WWW_ROOT."/files/comida/foto_comida/".
									$info_comida['Comida']['id']."/".
									$info_comida['Comida']['foto_comida_viejo'];
					$file = new File($dir);
		       		
		       		if($file->exists())
		       			$file->delete();
					
					$this->saveImg($info_comida['Comida']['foto_comida_valor_img'],
									$info_comida['Comida']['id'],
									$info_comida['Comida']['foto_comida']);
				}
				
	
				$this->setMessageFlash(1, 'Se guardo los cambios de la comida', null);
				
			}
			else 
			{
				
				$this->setMessageFlash(2, 'No se guardo los cambios de la comida', null);
				
			}
		}
		else 
		{
		    $this->setMessageFlash(2, 'No se guardo los cambios de la comida',null);
			
			$error = $this->getErrors( $this->Comida->validationErrors);
			
		}
		$this->redirect(array(
											'controller' => 'Comidas',
											'action' => 'getEditComida',$this->Comida->id,$error
									   )
								 );
	}
	
	private function llenarInfoComida($id_busqueda,$id_comida)
	{
		if ($id_busqueda == 1) // si es para edit
		{
			$this->llenar_combobox_tipo_comida(2);
		}
		$this->infoComidaEspecifica($id_comida);
	}
	
	private function infoComidaEspecifica($id_comida)
	{
		$comidas = $this->Comida->query('SELECT C.*, TC.* 
											FROM comidas C, tipo_comidas TC
											WHERE TC.id = C.tipo_comida_id
											AND C.id = '.$id_comida);
		$this->set('comidas',$comidas);
	}
	
	private function postConsultComida()
	{
		
		$nombre_comida_busq = $this->request->data['Consult_Comida']['nombre_comida_busq'];
		$tipo_comida_busq =	$this->request->data['Consult_Comida']['tipo_de_comida_busq'];	
		if ($nombre_comida_busq == NULL)
		{
			$nombre_comida_busq = "*";
		}
		
		$this->redirect(array('action' => 'consult_comida',$tipo_comida_busq,$nombre_comida_busq));
		
	}
	
	private function llenar_comida($id_tipo_comida,$nombre_comida)
	{
		$strqry = 'SELECT C.*, TC.*
					FROM comidas C, tipo_comidas TC
					WHERE C.tipo_comida_id = TC.id';
		
		if ($id_tipo_comida != 0)
		{
			$strqry = $strqry.' AND TC.id = '.$id_tipo_comida;
		}
		if ($nombre_comida != "*")
		{
			$strqry = $strqry.' AND C.nombre_comida LIKE "%'.$nombre_comida.'%"';
		}
		$comidas = $this->Comida->query($strqry);
		$this->set('comidas',$comidas);
		
	}
	
	private function infoConsultComida($id_tipo_comida,$nombre_comida)
	{
		$this->llenar_combobox_tipo_comida(1);
		$this->llenar_comida($id_tipo_comida, $nombre_comida);
		$this->set('id_tipo_comida',$id_tipo_comida);
		$this->set('nombre_comida',$nombre_comida);
	}
	
	private function postAddComida()
	{
		if($this->Comida->save($this->request->data))
		{
			$this->setMessageFlash(1, "Se guardo la Comida", null);
		}
		else
		{
			$this->setMessageFlash(1, "No se guardo la Comida", null);
		}
	}
	
	private function llenar_combobox_tipo_comida($id)
	{
		$tipo_comidas = $this->TipoComida->find('all');
		
		$arreglo = array();
		
		if ($id == 1)
		{
			array_push($arreglo, array(0 => 'Todos'));
		}
		foreach ($tipo_comidas as $tipo_comida) 
		{
				array_push($arreglo, array($tipo_comida['TipoComida']['id'] => $tipo_comida['TipoComida']['nombre_tipo_comida']));
		}

		$this->set('tipocomida',$arreglo);
	}
}



?>